// packageOnlineStore/pages/reviewDetails/reviewDetails.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    baseUrl:'',//全局连接地址
    userId:"",//用户id
    commentId:'',//评论id
    commentDetails:'',//评价详情
    replyList:[],//回复列表
    replyNumber:0,//评论的总回复数量
    commentLikeStatus: {} ,// 新增，用于存储回复的点赞状态，格式为 {回复id: true/false}
    replyContent:'',//回复内容
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    const app = getApp();
    const baseUrl=app.globalConfig.baseUrl //获取本地连接地址
    const userId=app.globalData.userInfo.userId
    const token = wx.getStorageSync('token');
    const commentId=options.id
    this.setData({
      userId:app.globalData.userInfo.userId,
      commentId:options.id,
      baseUrl:app.globalConfig.baseUrl,
    })
    this.getList([baseUrl,userId,commentId]);
  },
  //跳转到商品详情页
  goToProduct(e){
    wx.reLaunch({
      url: '/packageOnlineStore/pages/productDetails/productDetails?id='+e.currentTarget.dataset.id,
    })
  },
  //添加评论点赞
  addCollect(e){
    const app = getApp();
    const replyId=e.currentTarget.dataset.replyId
    const baseUrl=this.data.baseUrl //获取本地连接地址
    const userId=app.globalData.userInfo.userId
    const token = wx.getStorageSync('token');
    const commentId=this.data.commentId
     wx.request({
      url: baseUrl+'/product/replyLike',
      method:'POST',
      data:{
        userId:userId,
        replyId:replyId
      },
      header:{
        'Authorization': 'Bearer\u0020' + token
      },
      success:(res)=>{
        this.getList([baseUrl,userId,commentId])
      },
    })
  },
  //取消评论点赞
  cancelCollect(e){
    const app = getApp();
    const replyId=e.currentTarget.dataset.replyId
    const baseUrl=this.data.baseUrl //获取本地连接地址
    const userId=app.globalData.userInfo.userId
    const token = wx.getStorageSync('token');
    const commentId=this.data.commentId
     wx.request({
      url: baseUrl+'/product/replyLike/list',
      method:'GET',
      data:{
        commentId:commentId,
        userId:userId
      },
      header:{
        'Authorization': 'Bearer\u0020' + token
      },
      success:(res)=>{
        const LikeId=res.data.rows[0].id //获取到的已点赞的商品id
        wx.request({
          url: baseUrl+'/product/replyLike/'+LikeId,
          method:'DELETE',
          header:{
            'Authorization': 'Bearer\u0020' + token
          },
          success:(res)=>{
            this.getList([baseUrl,userId,commentId])
          },
        })
      },
    })
  },
  //输入触发函数
  inputChange(e){
    const replyContent=e.detail.value
    this.setData({
      replyContent:replyContent
    })
  },
  //回复触发函数
  addReplay(){
    const app = getApp();
    const replyContent=this.data.replyContent
    const baseUrl=this.data.baseUrl //获取本地连接地址
    const userId=app.globalData.userInfo.userId
    const token = wx.getStorageSync('token');
    const commentId=this.data.commentId
    wx.request({
      url: baseUrl+'/product/productReply',
      method:'POST',
      data:{
        userId:userId,
        replyContent:replyContent,
        commentId:commentId
      },
      header:{
        'Authorization': 'Bearer\u0020' + token
      },
      success:(res)=>{
        this.getList([baseUrl,userId,commentId])
      },
    })
  },
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  },
  //初始化方法
  getList(e){
    const app = getApp();
    const baseUrl = app.globalConfig.baseUrl; // 获取本地连接地址
    const userId=app.globalData.userInfo.userId
    const token = wx.getStorageSync('token');
    const commentId = e[2];
    //查询评价详情
    wx.request({
      url: baseUrl+'/product/productComment/'+commentId,
      method:'GET',
      header:{
        'Authorization': 'Bearer\u0020' + token
      },
      success:(res)=>{
          let score = res.data.data.productScore;
          let stars = [];
          for (let i = 0; i < 5; i++) {
              if (i < score) {
                  stars.push({ type: 'yellow' }); // 黄色星
              } else {
                  stars.push({ type: 'gray' }); // 灰色星
              }
          }
          res.data.data.stars = stars;
        this.setData({
          commentDetails:res.data.data
        })
        
      }
    })
    //查询回复列表
    wx.request({
      url: baseUrl+'/product/productReply/list',
      method:'GET',
      data:{
        commentId:commentId
      },
      header:{
        'Authorization': 'Bearer\u0020' + token
      },
      success:(res)=>{
        this.setData({
          replyList:res.data.rows,
          replyNumber:res.data.rows.length
        })
        let replyList = res.data.rows;
        const commentLikePromises = []; // 用于存储多个判断点赞请求的Promise数组
        const commentLikeStatus = {}; // 新增对象，用于存储评论id和对应的点赞情况
        replyList.forEach(item => {
          // 针对每条评论创建一个判断是否点赞的Promise请求
          const likeCheckPromise = new Promise((resolve, reject) => {
            wx.request({
                url: baseUrl + '/product/replyLike/list?userId=' + userId + '&replyId=' + item.id,
                method: 'GET',
                header:{
                  'Authorization': 'Bearer\u0020' + token
                },
                success: (res) => {
                    commentLikeStatus[item.id] = res.data.rows.length === 1; // 直接将点赞情况存入对象，以评论id为键
                    resolve(); // 当单个请求成功，进行resolve
                },
                fail: (err) => {
                    reject(err);
                }
            });
          });
          commentLikePromises.push(likeCheckPromise);
        })
        // 使用Promise.all并发执行所有判断点赞的请求，确保所有请求都完成后再继续后续操作
        Promise.all(commentLikePromises)
        .then(() => {
            this.setData({
                commentLikeStatus: commentLikeStatus // 将存储点赞情况的对象设置到data中
            });
        })
      }
    })
  }
})